package com.polymorphismodeldemo2;


import jdk.nashorn.internal.ir.IfNode;

import javax.xml.crypto.Data;

/**
 * @Auther: shiquan
 * @Date: 2024/10/21 - 10 - 21 -13:18
 */
public class Test {
    public void main(String[] args) {
        //创建对象
        Animal a =new Dog();
        //编译看左边,运行看右边
        a.eat(); //猫吃骨头

       /* Animal b =new Dog();
        b.eat();//狗吃骨头

        Dog d = new Dog();
        d.eat(); //狗吃骨头
        d.lookHome();//看家

        //在编译先检查左边的父类里面有没有这个方法, 没有直接报错
        //a.lookhome();
         Dog e = (Dog) d;
         e.lookHome();*/
         //先判断a是否为Dog类型  如果是  强制为Dog类型   转换之后变量名为d
        //Dog d = (Dog) a;
       // d.lookHome();
        if (a instanceof Dog ){
            Dog d = (Dog) a;
             d.lookHome();

        }else if(a instanceof Cat ){
            Cat c = (Cat) a;
            c.CatMouse();
        }else{
            System.out.println("没有这个类型,无法转换");
        }

    }
}

class Animal {
    public void eat() {
        System.out.println("动物吃东西");
    }
}

class Dog extends Animal{
    @Override
    public void eat(){
       System.out.println("狗吃骨头");
    }

    public void lookHome() { //特有的方法

        System.out.println("狗看家");
    }
}

class Cat extends Animal {
    @Override
    public void eat() {
        System.out.println("猫吃小鱼");
    }

    public void CatMouse() { //特有的方法

        System.out.println("猫看家");
    }
}



